
#include <string>
#include <chrono>
#include <thread>
#include <iostream>

#include <zmq.hpp>

// zmq的router-dealer模式，router 会接收到 两 frame 的消息 ，第一帧是 发送端的 标识。第二帧才是 真正的数据。
// 同时 router 回复的时候，也要 发送两 frame

int main() {
    zmq::context_t context{1};
    std::string id = "api-gateway-01";
    zmq::socket_t socket{context, zmq::socket_type::dealer};
    socket.set(zmq::sockopt::routing_id, id);
    socket.connect("tcp://127.0.0.1:9012");

    zmq_pollitem_t items[] = {
            {socket, 0, ZMQ_POLLIN | ZMQ_POLLERR | ZMQ_POLLPRI, 0}
    };

    socket.send(zmq::buffer("hello"), zmq::send_flags::dontwait);
    std::cout << "hand send " << std::endl;
    // zmq_socket_monitor 可以用它来对 监听 对端有没断开连接。
    for (;;) {
        int rc = zmq::poll(items, 1, 1000);

        if (rc == -1) {
            break;
        }

        if (items[0].revents & ZMQ_POLLIN) {
            zmq::message_t request;
            socket.recv(request, zmq::recv_flags::none);
            std::cout << "Received " << request.to_string() << std::endl;
        }
        std::cout << "event " << items[0].revents << std::endl;
    }

    return 0;
}